package cn.stylefeng.guns.sys.core.util;

import org.apache.commons.lang3.time.DateUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DateUtil {
    /**
     * 获取当前月的上个月
     * @author liuy
     * @Date 2020-06-03
     */
    public static String getLastMonth() {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date); // 设置为当前时间
        //calendar.set（）bug设置一个月时间，要是上个月没有31号的话，系统自动进到这个月
        //calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1); // 设置为上一个月
        calendar.add(Calendar.MONTH, -1);
        date = calendar.getTime();
        String accDate = format.format(date);
        return accDate;
    }

    /****
     * 传入具体日期 ，返回具体日期增加一个月。
     * @author liuy
     *@Date 2020-06-03
     * @throws ParseException
     */
    public static  String subMonth(String date) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date dt = sdf.parse(date);
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.MONTH, 1);
        Date dt1 = rightNow.getTime();
        String reStr = sdf.format(dt1);
        return reStr;
    }



    /**
     * @Title: getYearstoday
     * @Description: 获取某一天的前一天（昨天）
     * @author gejiang
     * @param day 当前天
     * @return 返回类型 java.lang.String
     * @throws
     */
    public static String getYearstoday(Date day){
        Date backupTime= DateUtils.addDays(day, -1);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(backupTime);
    }


    /**
     * 转换时间格式
     *
     * @param time 参数
     * @return 转换之后的时间格式
     */
    public static Date getTimeToDate(String time) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = simpleDateFormat.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }


    /**
     * @Title: getBetweenDate
     * @Description: 获取两个字符串日期之间的所有字符串日期
     * @author gejiang
     * @param startTime, endTime
     * @return 返回类型 java.util.List<java.lang.String>
     * @throws
     */
    public static List<String> getBetweenDate(String startTime, String endTime){

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 声明保存日期集合
        List<String> list = new ArrayList<String>();
        try {
            // 转化成日期类型
            Date startDate = sdf.parse(startTime);
            Date endDate = sdf.parse(endTime);

            //用Calendar 进行日期比较判断
            Calendar calendar = Calendar.getInstance();
            while (startDate.getTime()<=endDate.getTime()){
                // 把日期添加到集合
                list.add(sdf.format(startDate));
                System.out.println(sdf.format(startDate));
                // 设置日期
                calendar.setTime(startDate);
                //把日期增加一天
                calendar.add(Calendar.DATE, 1);
                // 获取增加后的日期
                startDate=calendar.getTime();
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 获取默认的时间字符串 ，形如2020-09-01 11:11:11
     * @author gyz
     * @return
     */
    public static String getNow(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String now = sdf.format(new Date());
        return now;
    }

}
